# -*- coding: utf-8 -*-
# frontend/pages/02_⚙️_系统设置.py
import streamlit as st
import json
from datetime import datetime

st.set_page_config(
    page_title="⚙️ 系统设置",
    page_icon="⚙️",
    layout="wide"
)

def main():
    st.title("⚙️ 系统设置")
    st.markdown("---")
    
    # 创建标签页
    tab1, tab2, tab3, tab4 = st.tabs(["🤖 模型配置", "🎨 界面设置", "🔐 安全设置", "📝 日志配置"])
    
    with tab1:
        render_model_settings()
    
    with tab2:
        render_ui_settings()
    
    with tab3:
        render_security_settings()
    
    with tab4:
        render_log_settings()

def render_model_settings():
    """渲染模型配置页面"""
    st.subheader("🤖 模型参数配置")
    
    # 模型选择
    selected_model = st.selectbox(
        "选择要配置的模型",
        ["GPT-4", "文心一言", "通义千问", "Claude"],
        key="config_model_select"
    )
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("#### 🎯 基础参数")
        temperature = st.slider(
            "🌡️ 温度 (Temperature)",
            min_value=0.0,
            max_value=2.0,
            value=0.7,
            step=0.1,
            help="控制回复的随机性，值越高越有创意"
        )
        
        max_tokens = st.slider(
            "📝 最大令牌数",
            min_value=100,
            max_value=4000,
            value=2000,
            step=100,
            help="控制回复的最大长度"
        )
        
        top_p = st.slider(
            "🎲 Top P",
            min_value=0.0,
            max_value=1.0,
            value=0.9,
            step=0.1,
            help="控制词汇选择的多样性"
        )
    
    with col2:
        st.markdown("#### ⚡ 性能参数")
        timeout = st.number_input(
            "⏱️ 超时时间 (秒)",
            min_value=5,
            max_value=120,
            value=30,
            help="模型响应的最大等待时间"
        )
        
        retry_count = st.number_input(
            "🔄 重试次数",
            min_value=0,
            max_value=5,
            value=3,
            help="请求失败时的重试次数"
        )
        
        enable_cache = st.checkbox(
            "💾 启用缓存",
            value=True,
            help="缓存相同问题的回复以提高响应速度"
        )
    
    # 保存按钮
    if st.button("💾 保存配置", key="save_model_config"):
        config = {
            'model': selected_model,
            'temperature': temperature,
            'max_tokens': max_tokens,
            'top_p': top_p,
            'timeout': timeout,
            'retry_count': retry_count,
            'enable_cache': enable_cache,
            'updated_at': datetime.now().isoformat()
        }
        st.success(f"✅ {selected_model} 配置已保存！")
        st.json(config)

def render_ui_settings():
    """渲染界面设置页面"""
    st.subheader("🎨 界面个性化设置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("#### 🌈 主题设置")
        theme = st.selectbox(
            "选择主题",
            ["🌞 明亮模式", "🌙 深色模式", "🌈 彩虹模式", "🌿 自然模式"],
            key="theme_select"
        )
        
        primary_color = st.color_picker(
            "🎨 主色调",
            value="#165DFF",
            help="选择应用的主要颜色"
        )
        
        font_size = st.slider(
            "📝 字体大小",
            min_value=12,
            max_value=20,
            value=14,
            help="调整界面字体大小"
        )
    
    with col2:
        st.markdown("#### 💬 聊天设置")
        show_timestamps = st.checkbox(
            "🕐 显示时间戳",
            value=True,
            help="在消息中显示发送时间"
        )
        
        show_avatars = st.checkbox(
            "👤 显示头像",
            value=True,
            help="在消息中显示用户和模型头像"
        )
        
        message_animation = st.checkbox(
            "✨ 消息动画",
            value=True,
            help="启用消息发送和接收动画"
        )
        
        auto_scroll = st.checkbox(
            "📜 自动滚动",
            value=True,
            help="新消息到达时自动滚动到底部"
        )
    
    # 预览区域
    st.markdown("#### 👀 效果预览")
    preview_container = st.container()
    
    with preview_container:
        st.markdown(f"""
        <div style="
            background: {primary_color}22;
            border: 2px solid {primary_color};
            border-radius: 15px;
            padding: 20px;
            margin: 10px 0;
        ">
            <h4 style="color: {primary_color};">🤖 这是预览效果</h4>
            <p style="font-size: {font_size}px;">字体大小: {font_size}px</p>
            <p>主题: {theme}</p>
            {'<small>⏰ ' + datetime.now().strftime('%H:%M:%S') + '</small>' if show_timestamps else ''}
        </div>
        """, unsafe_allow_html=True)
    
    if st.button("💾 保存界面设置", key="save_ui_config"):
        st.success("✅ 界面设置已保存！")

def render_security_settings():
    """渲染安全设置页面"""
    st.subheader("🔐 安全与隐私设置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("#### 🛡️ 数据安全")
        enable_encryption = st.checkbox(
            "🔐 启用端到端加密",
            value=True,
            help="加密所有传输的消息数据"
        )
        
        data_retention = st.selectbox(
            "📅 数据保留期",
            ["7天", "30天", "90天", "1年", "永久"],
            index=1,
            help="设置聊天记录的保留时间"
        )
        
        auto_delete = st.checkbox(
            "🗑️ 自动删除过期数据",
            value=True,
            help="自动删除超过保留期的数据"
        )
    
    with col2:
        st.markdown("#### 👤 隐私控制")
        anonymous_mode = st.checkbox(
            "🕶️ 匿名模式",
            value=False,
            help="不记录用户身份信息"
        )
        
        data_sharing = st.checkbox(
            "📊 允许数据分析",
            value=False,
            help="允许使用聊天数据进行系统优化"
        )
        
        export_data = st.checkbox(
            "📤 允许数据导出",
            value=True,
            help="允许用户导出自己的聊天记录"
        )
    
    # API密钥管理
    st.markdown("#### 🔑 API密钥管理")
    
    api_keys = {
        "OpenAI": st.text_input("OpenAI API Key", type="password", placeholder="sk-..."),
        "百度文心": st.text_input("百度文心 API Key", type="password", placeholder="输入API密钥"),
        "阿里通义": st.text_input("阿里通义 API Key", type="password", placeholder="输入API密钥"),
        "Anthropic": st.text_input("Anthropic API Key", type="password", placeholder="输入API密钥")
    }
    
    if st.button("🔐 更新API密钥", key="save_api_keys"):
        st.success("✅ API密钥已安全保存！")
    
    # 安全日志
    st.markdown("#### 📋 最近安全事件")
    security_logs = [
        {"时间": "2024-01-15 14:30", "事件": "✅ 用户登录成功", "IP": "192.168.1.100"},
        {"时间": "2024-01-15 14:25", "事件": "🔑 API密钥更新", "IP": "192.168.1.100"},
        {"时间": "2024-01-15 14:20", "事件": "⚠️ 异常登录尝试", "IP": "203.123.45.67"},
    ]
    
    st.dataframe(security_logs, use_container_width=True)

def render_log_settings():
    """渲染日志配置页面"""
    st.subheader("📝 日志与监控配置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("#### 📊 日志级别")
        log_level = st.selectbox(
            "选择日志级别",
            ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
            index=1,
            help="设置系统日志的详细程度"
        )
        
        enable_performance_log = st.checkbox(
            "⚡ 启用性能日志",
            value=True,
            help="记录系统性能指标"
        )
        
        enable_user_action_log = st.checkbox(
            "👤 启用用户行为日志",
            value=True,
            help="记录用户操作行为"
        )
    
    with col2:
        st.markdown("#### 🔄 日志轮转")
        log_rotation = st.selectbox(
            "日志轮转策略",
            ["每日", "每周", "每月", "按大小 (100MB)", "按大小 (1GB)"],
            index=0,
            help="设置日志文件的轮转策略"
        )
        
        max_log_files = st.number_input(
            "最大日志文件数",
            min_value=1,
            max_value=100,
            value=10,
            help="保留的历史日志文件数量"
        )
        
        compress_logs = st.checkbox(
            "🗜️ 压缩历史日志",
            value=True,
            help="自动压缩历史日志文件"
        )
    
    # 实时日志查看
    st.markdown("#### 🔍 实时日志")
    
    if st.button("📋 查看实时日志", key="view_logs"):
        log_container = st.container()
        
        with log_container:
            sample_logs = [
                "[2024-01-15 14:35:01] INFO - 用户发送消息: 你好",
                "[2024-01-15 14:35:02] INFO - 调用模型: GPT-4",
                "[2024-01-15 14:35:05] INFO - 模型响应完成, 耗时: 3.2s",
                "[2024-01-15 14:35:06] INFO - 消息已发送给用户",
                "[2024-01-15 14:35:10] WARNING - 模型响应时间较长: 3.2s > 3.0s",
            ]
            
            for log in sample_logs:
                if "ERROR" in log:
                    st.error(log)
                elif "WARNING" in log:
                    st.warning(log)
                else:
                    st.info(log)
    
    if st.button("💾 保存日志配置", key="save_log_config"):
        st.success("✅ 日志配置已保存！")

if __name__ == "__main__":
    main()
